package com.example.linearlayoutdemo.network.fun.repository;

import android.util.Log;

import com.example.linearlayoutdemo.network.fun.model.UserListResponse;
import com.example.linearlayoutdemo.network.fun.network.ApiFunService;
import com.example.linearlayoutdemo.network.fun.network.RetrofitClient;

import retrofit2.Call;
import retrofit2.Callback;
import retrofit2.Response;

public class UserRepository {
    private static final String TAG = "UserRepository";
    private final ApiFunService apiService;

    /**
     * Repository 向 ViewModel 传递结果的回调接口（纯 Java 接口，无 Android 依赖）
     * @param <T> 成功时返回的数据类型（此处为 UserListResponse）
     */
    public interface RepositoryCallback<T> {
        // 数据获取成功
        void onSuccess(T data);
        // 数据获取失败（含错误信息）
        void onFailure(String errorMsg);
    }

    // 构造方法：初始化 API 接口（依赖注入，更易测试）
    public UserRepository(ApiFunService apiService) {
        this.apiService = apiService;
    }

    // 无参构造：默认使用 RetrofitClient 实例（方便外部调用）
    public UserRepository() {
        this(RetrofitClient.getApiService());
    }

    /**
     * 获取用户列表（纯数据逻辑，通过回调传递结果给 ViewModel）
     * @param token 登录态 Token（Bearer xxx）
     * @param callback 结果回调（ViewModel 实现）
     */
    public void fetchUserList(String token, RepositoryCallback<UserListResponse> callback) {
        // 1. 判空防护（避免空回调导致崩溃）
        if (callback == null) {
            Log.e(TAG, "RepositoryCallback 不能为空");
            return;
        }

        // 2. Retrofit 异步请求
        apiService.getUserList().enqueue(new Callback<UserListResponse>() {
            @Override
            public void onResponse(Call<UserListResponse> call, Response<UserListResponse> response) {
                if (response.isSuccessful() && response.body() != null) {
                    UserListResponse data = response.body();
                    if (data.isSuccess()) {
                        // 3. 业务成功：通过回调返回数据
                        callback.onSuccess(data);
                    } else {
                        // 4. 业务失败（如 Token 无效）：返回服务器错误信息
                        callback.onFailure(data.getMessage());
                    }
                } else {
                    // 5. HTTP 失败（如 404、500）：返回协议错误信息
                    callback.onFailure("请求失败，响应码：" + response.code());
                }
            }

            @Override
            public void onFailure(Call<UserListResponse> call, Throwable t) {
                // 6. 网络异常：返回异常信息
                Log.e(TAG, "获取用户列表异常：", t);
                callback.onFailure("网络异常：" + t.getMessage());
            }
        });
    }
}
